package acm;

import java.awt.List;
import java.util.ArrayList;
import java.util.InputMismatchException;
import java.util.Scanner;
import java.util.Iterator;

public class Pitagoras {
	private int x;
	private int y;
	private int z;
	private boolean type;
	private ArrayList<String> array = new ArrayList<String>();

	/**constructor q se utiliza cuando
	 * Instantiates a new pitagoras.
	 *
	 * @param a contador a
	 * @param b contador b
	 * @param c contador c
	 */
	public Pitagoras(int a, int b, int c) { 
												// los numeros estan por defecto
		if(a>0 && b>0 && c>0){
			this.x = a;
			this.y = b;
			this.z = c;
		}else{
			
			System.out.println("Error -> Default");
			this.x = 3;
			this.y = 4;
			this.z = 5;
		}
		
		
		
		this.type = true; // numeros por defecto = true

	}

	/**constructor q se utiliza cuando se ingresan los numeros por consola
	 * 
	 */
	public Pitagoras() {
							
		this.x = 1; // primer numero ingresado inicializado en 1
		this.type = false; // numeros ingresados por consola = false
	}

	/**metodo que ingresa numeros por consola
	 * 
	 */
	public void ingresarNum() { 

		boolean continuar = true;

		while (continuar) {
			
			try {
				Scanner sc = new Scanner(System.in);
				System.out.println("Ingrese tres numeros mayores que cero. Ingrese cero para terminar: ");



					this.x = sc.nextInt(); // asigna a x el primer numero
											// ingresado

					if (this.x > 0) { // si el primer numero ingresado es
										// distinto de cero:

						this.y = sc.nextInt(); // asigna a 'y' el segundo numero
												// ingresado

						if (this.y <= 0) {

							System.out.println("Negativo/Cero");
						}

						else {
							this.z = sc.nextInt(); // asigna a 'z' el tercer
													// numero ingresado

							if (this.z <= 0) {
								System.out.println("Negativo/Cero");
							} else {
								continuar = false;
							}
						}
					}
					
					else{
						continuar = false;
					}
				

			} catch (InputMismatchException err) {

				System.out.println("Letra. Ingrese solo numeros");
			}
		}

	}

	/**verfifica que se cumpla el teorema de pitagoras en los numeros ingresados
	 * @return retorna correcto si el teorema de cumplio con exito y mala si el teorema no puede aplicarse
	 */
	public String verificarTeorema() { // 
										// 

		String resultado = "x, y, z " + this.x + " " + this.y + " " + this.z; // muestra
																				// los
																				// numeros
																				// ingresados

		if ((Math.pow(this.x, 2) + Math.pow(this.y, 2)) == Math.pow(this.z, 2)) { // calcula
																					// el
																					// teorema
																					// de
																					// pitagoras
			resultado += " Correcto"; // si se cumple el teorema, retorna
										// 'correcto'
		} else {
			resultado += " Mala"; // si no se cumple, retorna 'mala'
		}
		return resultado;
	}

	/**ejecuta el teorema para todos los trios ingresados
	 * 
	 */
	public void ejecutarTeorema() { 
									

		while (this.x != 0) { // mientras el primer numero ingresado no sea cero
			if (this.type) { // si los numeros estan por defecto
				this.array.add(this.verificarTeorema()); // verificamos el
															// teorema
				this.type = false;
			}
			this.ingresarNum();
			if (this.x != 0) {
				this.array.add(this.verificarTeorema());
			}

		}

	}

	/**Despliega arraylist por consola
	 * 
	 */
	public void mostrarLista() {

		Iterator<String> it = this.array.iterator();

		while (it.hasNext()) {
			System.out.println(it.next());

		}
	}



}
